<?php

declare(strict_types=1);

namespace App\Controller;

use App\Constants\ErrorCode;
use App\Library\Common;
use App\Model\data\CurrentShopData;
use App\Service\ReservedSeatsService;
use Hyperf\DbConnection\Db;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Validation\Rule;

class ReservedSeatsController extends AbstractController
{
    /**
     * @Inject
     * @var ReservedSeatsService
     * */
    private $seat;

    public function public_index()
    {
        $request_p =  $this->request->inputs(['date','lat','lng','people_num','time','range','is_unshared']);
        $this->validation($request_p,
            [
                'lng'=> 'required|numeric|min:0|max:180',
                'lat'=> 'required|numeric|min:-90|max:90',
                'date'=> 'date|after:yesterday',
                'time'=> 'integer|min:0|max:2400',
                'people_num'=>"integer|min:1",
                'range'=>"integer|min:0",
                'is_unshared'=>"boolean",
            ],
        );
        return $this->jsonResponse->success($this->seat->index($request_p),'设置详情');
    }
    public function detail()
    {
        $shop_info = CurrentShopData::getData();
        return $this->jsonResponse->success($this->seat->info(intval($shop_info->id)),'设置详情');
    }
    public function public_detail()
    {
        $request_p =  $this->request->inputs(['shop_id']);
        $this->validation($request_p,
            [
                'shop_id'=> 'required|integer|min:0|exists:fly_shop,id',
            ],
        );
        return $this->jsonResponse->success($this->seat->info(intval($request_p['shop_id'])),'设置详情');
    }

    public function set()
    {
        $shop_info = CurrentShopData::getData();
        $request_p =  $this->request->inputs(['status','is_unshared','min_person','advance_days','deposit_type',
            'single_deposit',
            'open_time',
            'cancel_type','before_minute']);
        $request_p['shop_id']= $shop_info->id;
        $this->validation($request_p,
            [
                'status'=> 'required|boolean',
                'is_unshared'=> 'required|boolean',
                'min_person'=>[
                    Rule::requiredIf($request_p['is_unshared']==1),
                    "integer",
                    "min:1",
                ],
                'shop_id'=>[
                    Rule::unique('fly_reserved_seats_set','shop_id')->whereNull('deleted_at'),
                    "integer",
                    "min:1",
                ],
                'advance_days'=>  "required|integer|min:0",
                'deposit_type'=>"required|integer|min:1|max:3",
                'single_deposit'=>[
                    Rule::requiredIf($request_p['deposit_type']!=1),
                    "numeric",
                    "min:0.01",
                ],
                'cancel_type'=>'required|integer|min:1|max:3',
                'before_minute'=>[
                    Rule::requiredIf($request_p['cancel_type']==1),
                    "integer",
                    "min:1",
                ],
                'open_time'=>'required|array|distinct|min:0',
                'open_time.*.start_time'=>'required|integer|distinct|min:0|max:2400',
                'open_time.*.end_time'=>'required|integer|distinct|min:0|max:2400',
            ],
            ['shop_id.unique'=>'商铺已经设置，请刷新查看进行修改']
            );
        $request_p['created_at']= date('Y-m-d H:i:s');
        $request_p['create_by']= $shop_info->user_id;
        $res  = $this->seat->set_seat($request_p);
        if($res){
            return $this->jsonResponse->success($res,'设置成功');
        }else{
            return $this->jsonResponse->error(ErrorCode::SYSTEM_INVALID,'设置失败');
        }
    }

    public function edit()
    {

        $shop_info = CurrentShopData::getData();
        $request_p =  $this->request->inputs(['id','status','is_unshared','min_person','advance_days','deposit_type',
            'single_deposit',
            'open_time',
            'cancel_type','before_minute']);
        $this->validation($request_p,
            [
                'id'=>[
                    "required",
                    "integer",
                    "min:1",
                    Rule::exists('fly_reserved_seats_set')->where('shop_id',$shop_info->id)->whereNull('deleted_at'),
                ],
                'status'=> 'required|boolean',
                'is_unshared'=> 'required|boolean',
                'min_person'=>[
                    Rule::requiredIf($request_p['is_unshared']==1),
                    "integer",
                    "min:1",
                ],
                'advance_days'=>  "required|integer|min:0",
                'deposit_type'=>"required|integer|min:1|max:3",
                'single_deposit'=>[
                    Rule::requiredIf($request_p['deposit_type']!=1),
                    "numeric",
                    "min:0.01",
                ],
                'cancel_type'=>'required|integer|min:1|max:3',
                'before_minute'=>[
                    Rule::requiredIf($request_p['cancel_type']==1),
                    "integer",
                    "min:1",
                ],
                'open_time'=>'required|array|distinct|min:0',
                'open_time.*.start_time'=>'required|integer|distinct|min:0|max:2400',
                'open_time.*.end_time'=>'required|integer|distinct|min:0|max:2400',
            ],
            );
        $request_p['updated_at']= date('Y-m-d H:i:s');
        $request_p['update_by']= $shop_info->user_id;
        $request_p['shop_id']= $shop_info->id;
        $up_res = $this->seat->update_seat($request_p);
        if($up_res){
            return $this->jsonResponse->success($up_res,'设置成功');
        }else{
            return $this->jsonResponse->error(ErrorCode::SYSTEM_INVALID,'设置失败');
        }
    }


    /***
 *                                         ,s555SB@@&
 *                                      :9H####@@@@@Xi
 *                                     1@@@@@@@@@@@@@@8
 *                                   ,8@@@@@@@@@B@@@@@@8
 *                                  :B@@@@X3hi8Bs;B@@@@@Ah,
 *             ,8i                  r@@@B:     1S ,M@@@@@@#8;
 *            1AB35.i:               X@@8 .   SGhr ,A@@@@@@@@S
 *            1@h31MX8                18Hhh3i .i3r ,A@@@@@@@@@5
 *            ;@&i,58r5                 rGSS:     :B@@@@@@@@@@A
 *             1#i  . 9i                 hX.  .: .5@@@@@@@@@@@1
 *              sG1,  ,G53s.              9#Xi;hS5 3B@@@@@@@B1
 *               .h8h.,A@@@MXSs,           #@H1:    3ssSSX@1
 *               s ,@@@@@@@@@@@@Xhi,       r#@@X1s9M8    .GA981
 *               ,. rS8H#@@@@@@@@@@#HG51;.  .h31i;9@r    .8@@@@BS;i;
 *                .19AXXXAB@@@@@@@@@@@@@@#MHXG893hrX#XGGXM@@@@@@@@@@MS
 *                s@@MM@@@hsX#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&,
 *              :GB@#3G@@Brs ,1GM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B,
 *            .hM@@@#@@#MX 51  r;iSGAM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8
 *          :3B@@@@@@@@@@@&9@h :Gs   .;sSXH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@:
 *      s&HA#@@@@@@@@@@@@@@M89A;.8S.       ,r3@@@@@@@@@@@@@@@@@@@@@@@@@@@r
 *   ,13B@@@@@@@@@@@@@@@@@@@5 5B3 ;.         ;@@@@@@@@@@@@@@@@@@@@@@@@@@@i
 *  5#@@#&@@@@@@@@@@@@@@@@@@9  .39:          ;@@@@@@@@@@@@@@@@@@@@@@@@@@@;
 *  9@@@X:MM@@@@@@@@@@@@@@@#;    ;31.         H@@@@@@@@@@@@@@@@@@@@@@@@@@:
 *   SH#@B9.rM@@@@@@@@@@@@@B      @@@          3@@@@@@@@@@@@@@@@@@@@@@@@@@5
 *     ,:.   9@@@@@@@@@@@#HB5   @@@@@           .M@@@@@@@@@@@@@@@@@@@@@@B
 *           ,ssirhSM@&1;i19911i,.             s@@@@@@@@@@@@@@@@@@@@@@@@@@S
 *              ,,,rHAri1h1rh&@#353Sh:          8@@@@@@@@@@@@@@@@@@@@@@@@@#:
 *            .A3hH@#5S553&@@#h   i:i9S          #@@@@@@@@@@@@@@@@@@@@@@@@@A.
 *
 *
 *    妈妈，再爱我一次！
 */
}
